From 0f962f107576ceb8adf697c0598fdeed51882e0a Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 27 Jan 2015 21:35:40 +0000 Subject: [PATCH] device: Add gdk_device_get_axes(), and ::axes property This returns a GdkAxisFlags, holding the axes currently available through this device. --- docs/reference/gdk/gdk3-sections.txt | 2 ++ gdk/gdkdevice.c | 39 ++++++++++++++++++++++++++++ gdk/gdkdevice.h | 32 +++++++++++++++++++++++ gdk/gdkdeviceprivate.h | 1 + 4 files changed, 74 insertions(+) diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt index 48fcd3c301..097779421b 100644 --- a/docs/reference/gdk/gdk3-sections.txt +++ b/docs/reference/gdk/gdk3-sections.txt @@ -715,6 +715,7 @@ GdkDevice GdkInputSource GdkInputMode GdkAxisUse +GdkAxisFlags GdkDeviceType GdkGrabOwnership @@ -736,6 +737,7 @@ gdk_device_get_display gdk_device_get_has_cursor gdk_device_get_n_axes gdk_device_get_n_keys +gdk_device_get_axes gdk_device_warp gdk_device_get_seat diff --git a/gdk/gdkdevice.c b/gdk/gdkdevice.c index 3edaa526f0..0ede56cd43 100644 --- a/gdk/gdkdevice.c +++ b/gdk/gdkdevice.c @@ -92,6 +92,7 @@ enum { PROP_PRODUCT_ID, PROP_SEAT, PROP_NUM_TOUCHES, + PROP_AXES, LAST_PROP }; @@ -305,6 +306,19 @@ gdk_device_class_init (GdkDeviceClass *klass) 0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); + /** + * GdkDevice:axes: + * + * The axes currently available for this device. + * + * Since: 3.22 + */ + device_props[PROP_AXES] = + g_param_spec_flags ("axes", + P_("Axes"), + P_("Axes"), + GDK_TYPE_AXIS_FLAGS, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_properties (object_class, LAST_PROP, device_props); @@ -477,6 +491,9 @@ gdk_device_get_property (GObject *object, case PROP_NUM_TOUCHES: g_value_set_uint (value, device->num_touches); break; + case PROP_AXES: + g_value_set_flags (value, device->axis_flags); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1515,7 +1532,10 @@ _gdk_device_reset_axes (GdkDevice *device) for (i = device->axes->len - 1; i >= 0; i--) g_array_remove_index (device->axes, i); + device->axis_flags = 0; + g_object_notify_by_pspec (G_OBJECT (device), device_props[PROP_N_AXES]); + g_object_notify_by_pspec (G_OBJECT (device), device_props[PROP_AXES]); } guint @@ -1556,7 +1576,10 @@ _gdk_device_add_axis (GdkDevice *device, device->axes = g_array_append_val (device->axes, axis_info); pos = device->axes->len - 1; + device->axis_flags |= (1 << use); + g_object_notify_by_pspec (G_OBJECT (device), device_props[PROP_N_AXES]); + g_object_notify_by_pspec (G_OBJECT (device), device_props[PROP_AXES]); return pos; } @@ -1964,3 +1987,19 @@ gdk_device_get_seat (GdkDevice *device) return device->seat; } + +/** + * gdk_device_get_axes: + * @device: a #GdkDevice + * + * Returns the axes currently available on the device. + * + * Since: 3.22 + **/ +GdkAxisFlags +gdk_device_get_axes (GdkDevice *device) +{ + g_return_val_if_fail (GDK_IS_DEVICE (device), 0); + + return device->axis_flags; +} diff --git a/gdk/gdkdevice.h b/gdk/gdkdevice.h index d171f8fc01..ad5bf66e94 100644 --- a/gdk/gdkdevice.h +++ b/gdk/gdkdevice.h @@ -113,6 +113,35 @@ typedef enum GDK_AXIS_LAST } GdkAxisUse; +/** + * GdkAxisFlags: + * @GDK_AXIS_FLAG_X: X axis is present + * @GDK_AXIS_FLAG_Y: Y axis is present + * @GDK_AXIS_FLAG_PRESSURE: Pressure axis is present + * @GDK_AXIS_FLAG_XTILT: X tilt axis is present + * @GDK_AXIS_FLAG_YTILT: Y tilt axis is present + * @GDK_AXIS_FLAG_WHEEL: Wheel axis is present + * @GDK_AXIS_FLAG_DISTANCE: Distance axis is present + * @GDK_AXIS_FLAG_ROTATION: Z-axis rotation is present + * @GDK_AXIS_FLAG_SLIDER: Slider axis is present + * + * Flags describing the current capabilities of a device/tool. + * + * Since: 3.22 + */ +typedef enum +{ + GDK_AXIS_FLAG_X = 1 << GDK_AXIS_X, + GDK_AXIS_FLAG_Y = 1 << GDK_AXIS_Y, + GDK_AXIS_FLAG_PRESSURE = 1 << GDK_AXIS_PRESSURE, + GDK_AXIS_FLAG_XTILT = 1 << GDK_AXIS_XTILT, + GDK_AXIS_FLAG_YTILT = 1 << GDK_AXIS_YTILT, + GDK_AXIS_FLAG_WHEEL = 1 << GDK_AXIS_WHEEL, + GDK_AXIS_FLAG_DISTANCE = 1 << GDK_AXIS_DISTANCE, + GDK_AXIS_FLAG_ROTATION = 1 << GDK_AXIS_ROTATION, + GDK_AXIS_FLAG_SLIDER = 1 << GDK_AXIS_SLIDER, +} GdkAxisFlags; + /** * GdkDeviceType: * @GDK_DEVICE_TYPE_MASTER: Device is a master (or virtual) device. There will @@ -288,6 +317,9 @@ const gchar *gdk_device_get_product_id (GdkDevice *device); GDK_AVAILABLE_IN_3_20 GdkSeat *gdk_device_get_seat (GdkDevice *device); +GDK_AVAILABLE_IN_3_22 +GdkAxisFlags gdk_device_get_axes (GdkDevice *device); + G_END_DECLS #endif /* __GDK_DEVICE_H__ */ diff --git a/gdk/gdkdeviceprivate.h b/gdk/gdkdeviceprivate.h index 2350d02886..bdfc93a1e0 100644 --- a/gdk/gdkdeviceprivate.h +++ b/gdk/gdkdeviceprivate.h @@ -47,6 +47,7 @@ struct _GdkDevice GdkInputMode mode; gboolean has_cursor; gint num_keys; + GdkAxisFlags axis_flags; GdkDeviceKey *keys; GdkDeviceManager *manager; GdkDisplay *display; -- 2.30.2